package com.woniuxy.exam.intercepters;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Component
public class PermissionIntercepter implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        /*
           我们的请求 既有同步请求， 又有异步请求
           1. 同步请求  没有登录  可以转发到登录界面
           2. 异步请求 不可以转发到登录界面 只能回应一个信息
              异步请求的时候， 发送请求有一个预发送 请求方式是 OPTIONS   不能拦截
         */
        //1.获取请求模式   GET、POST、DELETE、PUT、OPTIONS、TRACE
        String method = request.getMethod();
        if (method.equals("OPTIONS")) {
            return true ;
        }
        Object userInfo = request.getSession().getAttribute("userInfo");
        //2.判断是异步还是同步   通过头信息 进行判断
        String header = request.getHeader("X-Requested-With");
        if ("XMLHttpRequest".equals(header)) {
            // 异步请求
            if (userInfo != null) {
                return true ;
            }else {
                response.getWriter().print("noLogin");
                return  false ;
            }
        }else {
            //同步请求
            if (userInfo != null) {
                return true ;
            }else {
                request.setAttribute("errorInfo","亲，请先登录!");
                request.getRequestDispatcher("/login.html").forward(request,response);
                return false ;
            }
        }
    }
}
